#ifndef __LIB_AGORA_ADMIN_ICHANNEL_H__
#define __LIB_AGORA_ADMIN_ICHANNEL_H__

#include <list>
#include <map>
#include <string>
#include "AdminIUser.h"
#include "AdminIChannelRight.h"

namespace AgoraAdmin
{

	class	IChannel
	{
	public:
		virtual const unsigned int	GetId(void) const = 0;
		//virtual const unsigned int	SetId(const unsigned int) = 0;
		virtual IChannel*			GetParent(void) const = 0;
		virtual const unsigned int	GetParentId(void) const = 0;;
		virtual void				SetParent(IChannel*) = 0;
		virtual void				SetParentNODB(IChannel* parent) = 0;
		//virtual const unsigned int	SetParent(const unsigned int) = 0;
		//virtual const unsigned int	SetParent(const std::string&) = 0;
		//virtual const unsigned int	UnSetParent(void) = 0;
		virtual const bool			HaveParent(void) const = 0;
		virtual const std::string&	GetName(void) const = 0;
		virtual void				SetName(const std::string&) = 0;
		virtual const unsigned int	GetMaxNameLength(void) const = 0;
		virtual void				SetMaxNameLength(const unsigned int, bool) = 0;
		virtual const std::string&	GetPassword(void) const = 0;
		virtual void				SetPassword(const std::string&, bool) = 0;
		virtual const unsigned int	GetMaxPasswordLength(void) const = 0;
		virtual void				SetMaxPasswordLength(const unsigned int, bool) = 0;
		virtual const std::string&	GetMotd(void) const = 0;
		virtual void				SetMotd(const std::string&, bool) = 0;
		virtual const unsigned int	GetMaxMotdLength(void) const = 0;
		virtual void				SetMaxMotdLength(const unsigned int, bool) = 0;
		virtual const std::string&	GetDescription(void) const = 0;
		virtual void				SetDescription(const std::string&, bool) = 0;
		virtual const unsigned int	GetMaxDescriptionLength(void) const = 0;
		virtual void				SetMaxDescriptionLength(const unsigned int, bool) = 0;
		virtual const bool			GetVisibility(void) const = 0;
		virtual void				SetVisibility(const bool, bool) = 0;
		virtual const unsigned int	GetMaxUser(void) const = 0;
		virtual void				SetMaxUser(const unsigned int, bool) = 0;
		virtual const unsigned int	GetMaxTalker(void) const = 0;
		virtual void				SetMaxTalker(const unsigned int, bool) = 0;

		virtual void								DeleteChannel(void) = 0;
		virtual void								AddChannelChild(IChannel*) = 0;
		virtual void								RemoveChannelChild(IChannel*) = 0;
		//virtual std::list<IChannel*>&				GetChannelChild(void) const = 0;
		virtual std::list<IChannel*>&				GetChannelChild(void) = 0;
		virtual void								AddUser(IUser*) = 0;
		virtual void								RemoveUser(IUser*) = 0;
		//virtual const unsigned int					SubscribeUser(IUser*, IChannelRight*) = 0;
		//virtual const unsigned int					UnSubscribeUser(IUser*) = 0;
		//virtual std::list<IUser*>&					GetUser() const = 0;
		virtual std::list<IUser*>&					GetUser() = 0;
		virtual std::list<unsigned int>&			GetBanList() = 0;
		virtual void								AddBanList(const unsigned int idUser) = 0;
		virtual void								RemoveBanList(const unsigned int idUser) = 0;
		virtual bool								UserIsBan(const unsigned int idUser) = 0;
		virtual std::map<unsigned int, IUser*>&		GetMuteMap() = 0;
		virtual std::list<IUser*>&					GetMuteList() = 0;
		virtual void								AddMuteUser(IUser* user) = 0;
		virtual void								RemoveMuteUser(IUser* user) = 0;
		virtual bool								UserIsMute(IUser* user) = 0;
	};

}
#endif